/**
 * @file Bus.c
 * @author liqiang (liqiang@hacint.com.cn)
 * @brief  提供总线IO的初始化
 * @version 1.0.0
 * @date 2023-08-17
 * 
 * 
 */

#include "BusIO.h"

 /***/

void Bus_Data_IO_Init(void);
void Bus_Cmd_IO_Init(void);

void Din_Init(void) ;
void Dout_Init(void);
 
void  Bus_IO_Init(void)
{ 
    
	/*输入数据总线*/
	Bus_Data_IO_Init(); 
	/*输出命令总线out*/  
	Bus_Cmd_IO_Init();   
	
	/*Din输入控制信号*/
	Din_Init();         
	Dout_Init(); 
	/*Dout输出控制信号*/
	BusConfig();
}
 
 
 void   Plat_Bus_IO_Init(void){
        Bus_IO_Init(); 
 }
 


 
/***8路数据输入引脚 与数据采集复用*************/
void Bus_Data_IO_Init(void)
{
	//初始化8个GPIO引脚，将它们配置为输入模式，并设置上拉电阻和高电平速度
    GPIO_InitTypeDef GPIO_Initure;
	
    GPIO_Initure.Mode=GPIO_MODE_INPUT;  
    GPIO_Initure.Pull=GPIO_PULLUP;          
    GPIO_Initure.Speed=GPIO_SPEED_HIGH; 
	
	//输入引脚使能，GPIO初始化
	IN0_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN0_BUS_PIN ;  
	HAL_GPIO_Init(IN0_BUS_PORT,&GPIO_Initure);

	IN1_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN1_BUS_PIN ;  
	HAL_GPIO_Init(IN1_BUS_PORT,&GPIO_Initure);

	IN2_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN2_BUS_PIN ;  
	HAL_GPIO_Init(IN2_BUS_PORT,&GPIO_Initure);

	IN3_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN3_BUS_PIN ;  
	HAL_GPIO_Init(IN3_BUS_PORT,&GPIO_Initure);

	IN4_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN4_BUS_PIN ;  
	HAL_GPIO_Init(IN4_BUS_PORT,&GPIO_Initure);

	IN5_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN5_BUS_PIN ;  
	HAL_GPIO_Init(IN5_BUS_PORT,&GPIO_Initure);

	IN6_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN6_BUS_PIN ;  
	HAL_GPIO_Init(IN6_BUS_PORT,&GPIO_Initure);

	IN7_BUS_RCC_ENABLE();  
	GPIO_Initure.Pin=IN7_BUS_PIN ;  
	HAL_GPIO_Init(IN7_BUS_PORT,&GPIO_Initure);
	
	//初始化低电平
	HAL_GPIO_WritePin(IN0_BUS_PORT,IN0_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(IN1_BUS_PORT,IN1_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(IN2_BUS_PORT,IN2_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(IN3_BUS_PORT,IN3_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(IN4_BUS_PORT,IN4_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(IN5_BUS_PORT,IN5_BUS_PIN,GPIO_PIN_RESET);		
	HAL_GPIO_WritePin(IN6_BUS_PORT,IN6_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(IN7_BUS_PORT,IN7_BUS_PIN,GPIO_PIN_RESET);		 		
}



/***************************8路数据输出,与终止端端选复用 ***************************/ 
void Bus_Cmd_IO_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure;	
	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      
	GPIO_Initure.Pull=GPIO_PULLUP;        	
	GPIO_Initure.Speed=GPIO_SPEED_LOW;  

	E_SOUT0_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT0_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT0_BUS_PORT,&GPIO_Initure);

	E_SOUT1_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT1_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT1_BUS_PORT,&GPIO_Initure);

	E_SOUT2_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT2_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT2_BUS_PORT,&GPIO_Initure);

	E_SOUT3_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT3_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT3_BUS_PORT,&GPIO_Initure);

	E_SOUT4_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT4_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT4_BUS_PORT,&GPIO_Initure);

	E_SOUT5_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT5_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT5_BUS_PORT,&GPIO_Initure);

	E_SOUT6_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT6_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT6_BUS_PORT,&GPIO_Initure);

	E_SOUT7_BUS_RCC_ENABLE();           		
	GPIO_Initure.Pin=E_SOUT7_BUS_PIN;  
	HAL_GPIO_Init(E_SOUT7_BUS_PORT,&GPIO_Initure);

	HAL_GPIO_WritePin(E_SOUT0_BUS_PORT,E_SOUT0_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(E_SOUT1_BUS_PORT,E_SOUT1_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(E_SOUT2_BUS_PORT,E_SOUT2_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(E_SOUT3_BUS_PORT,E_SOUT3_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(E_SOUT4_BUS_PORT,E_SOUT4_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(E_SOUT5_BUS_PORT,E_SOUT5_BUS_PIN,GPIO_PIN_RESET);		
	HAL_GPIO_WritePin(E_SOUT6_BUS_PORT,E_SOUT6_BUS_PIN,GPIO_PIN_RESET);		 
	HAL_GPIO_WritePin(E_SOUT7_BUS_PORT,E_SOUT7_BUS_PIN,GPIO_PIN_RESET);		 	
}
  
/**********************输入总线控制信号************************************/
void Din_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure;  


	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //输入
	GPIO_Initure.Pull=GPIO_PULLUP;        //下拉
	GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速 

	PIN0_EN_RCC_ENABLE();           //开启 时钟 
	GPIO_Initure.Pin=PIN0_EN_PIN ; 
	HAL_GPIO_Init(PIN0_EN_PORT,&GPIO_Initure); 

	PIN1_EN_RCC_ENABLE();           //开启 时钟 
	GPIO_Initure.Pin=PIN1_EN_PIN ; 
	HAL_GPIO_Init(PIN1_EN_PORT,&GPIO_Initure); 

	PIN2_EN_RCC_ENABLE();           //开启 时钟 
	GPIO_Initure.Pin=PIN2_EN_PIN ; 
	HAL_GPIO_Init(PIN2_EN_PORT,&GPIO_Initure); 

	HAL_GPIO_WritePin(PIN0_EN_PORT,PIN0_EN_PIN,GPIO_PIN_SET);
	HAL_GPIO_WritePin(PIN1_EN_PORT,PIN1_EN_PIN,GPIO_PIN_SET);
	HAL_GPIO_WritePin(PIN2_EN_PORT,PIN2_EN_PIN,GPIO_PIN_SET);
}

/**********************输出总线控制信号************************************/
void Dout_Init(void)
{
	GPIO_InitTypeDef GPIO_Initure;  


	GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //输入
	GPIO_Initure.Pull=GPIO_PULLUP;        //下拉
	GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速 

	POUT0_EN_RCC_ENABLE();           //开启 时钟 
	GPIO_Initure.Pin=POUT0_EN_PIN ; 
	HAL_GPIO_Init(POUT0_EN_PORT,&GPIO_Initure); 

	POUT1_EN_RCC_ENABLE();           //开启 时钟 
	GPIO_Initure.Pin=POUT1_EN_PIN ; 
	HAL_GPIO_Init(POUT1_EN_PORT,&GPIO_Initure); 

	POUT2_EN_RCC_ENABLE();           //开启 时钟 
	GPIO_Initure.Pin=POUT2_EN_PIN ; 
	HAL_GPIO_Init(POUT2_EN_PORT,&GPIO_Initure); 

	HAL_GPIO_WritePin(POUT0_EN_PORT,POUT0_EN_PIN,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(POUT1_EN_PORT,POUT1_EN_PIN,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(POUT2_EN_PORT,POUT2_EN_PIN,GPIO_PIN_RESET);
}